/*
 * BiblioDeCanciones.h
 *
 *  Created on: 12/04/2013
 *      Author: pato
 */

#ifndef BIBLIODECANCIONES_H_
#define BIBLIODECANCIONES_H_

#include <iostream>     // std::cin, std::cout
#include <fstream>      // std::ifstream
#include <string.h>
#include <cstddef>
#include <stdlib.h>
#include <list>
#include <string>

#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>

#include "../Logica/ArbolBMas/ArbolBMas.h"
#include "../Logica/HashExtensible/HashExtensible.h"
#include "../Logica/RV/RegistroCanciones.h"
#include "../Logica/IndiceInvertido/IndiceInvertido.h"
#include "../Logica/Utilidades/NormalizadorTxt.h"
#include "ParserCanciones.h"
#include "../Logica/Utilidades/Constantes.h"

using namespace std;
class BiblioDeCanciones {
public:
	BiblioDeCanciones();
	void Indexar();
	int IndexarCancion(string path);
	int NuevoOrigen(string origen);
	int NuevoDestino(string destino);
	void BuscarAutor(string* autor);
	void BuscarTitulo(string* titulo);
	void BuscarLetra(string *letra);
	void MostrarCancion(unsigned int id);
	int BorrarID(unsigned int id);
	void BorrarTodo();
	virtual ~BiblioDeCanciones();

	ArbolBMas * getIndiceAutores();
	HashExtensible * getIndiceTitulos();
	IndiceInvertido * getIndiceInvertido();
	RegistroCanciones * getRegistroCanciones();

private:
	ArbolBMas 	*indiceAutores;
	HashExtensible	*indiceTitulos;
	RegistroCanciones	*biblioteca;
	IndiceInvertido *indiceInvertido;
	ParserCanciones *parser_canciones;
	string* origen;
	string* destino;
	bool EstaCreado;
	void CrearEstructuras();
	bool ComprobarPath(string origen);
};

#endif /* BIBLIODECANCIONES_H_ */
